#include <iostream>
using namespace std;
//class A
//{
//public:
//	virtual void func()
//	{
//
//	}
//	~A()
//	{
//		cout << "~A()" << endl;
//	}
//private:
//	int _a;
//};
//class B : public  A
//{
//public:
//	void func()
//	{
//
//	}
//	~B()
//	{
//		cout << "~B()" << endl;
//	}
//private:
//	int _b;
//};
//int main()
//{
//	B b;
//	//A* ptr = &b;
//	//delete ptr;
//	return 0;
//}

class A {
public:
	A(const char* s) { cout << s << endl; }
	~A() {}
};
class B :virtual public A
{
public:
	B(const char* s1, const char* s2) :A(s1) { cout << s2 << endl; }
};
class C :virtual public A
{
public:
	C(const char* s1, const char* s2) :A(s1) { cout << s2 << endl; }
};
class D :public B, public C
{
public:
	D(const char* s1, const char* s2, const char* s3, const char* s4) :B(s1, s2), C(s1, s3), A(s1)
	{
		cout << s4 << endl;
	}
};
int main() 
{

	const char* a = "dafa";
	D* p = new D("class A", "class B", "class C", "class D");
	delete p;
	return 0;
}